﻿// 3376. 成绩排序2.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//

#include <iostream>
#include <algorithm>



using namespace std;
/*
https://www.acwing.com/problem/content/3379/

给定学生的成绩单，成绩单中包含每个学生的学号和分数，请将成绩单按成绩从低到高的顺序重新排序。

如果学生的成绩相同，则按照学号从小到大的顺序进行排序。

输入格式
第一行包含整数 N，表示学生数量。

接下来 N行，每行包含两个整数 p和 q，表示一个学生的学号和成绩。

学生的学号各不相同。

输出格式
输出重新排序后的成绩单。

每行输出一个学生的学号和成绩，用单个空格隔开。

数据范围
1≤N≤100
,
1≤p≤100
,
0≤q≤100
输入样例：
3
1 90
2 87
3 92
输出样例：
2 87
1 90
3 92
*/

const int N = 300;

struct STU {
	int id, score;
}student[N];

bool cmp(const struct STU& a, const struct STU& b) {
	if (a.score < b.score) return true;
	else if (a.score == b.score) {
		return a.id < b.id;
	}
	return false;
}


int main()
{
	int n;
	cin >> n;
	for (int i = 0; i < n; i++) {
		cin >> student[i].id >> student[i].score;
	}

	sort(student, student + n, cmp);

	for (int i = 0; i < n; i++) {
		cout << student[i].id << " " << student[i].score << endl;
	}

	return 0;
}

